λ체 μ½©μ΄ λμΌ?
λΉ(Bean)?
μ€νλ§ νλ μμν¬μμ κ΄λ¦¬νλ κ°μ²΄λ₯Ό μλ―Ένλ μ©μ΄
μ€νλ§μ μ ν리μΌμ΄μ λ΄μμ κ°μ²΄μ μλͺ μ£ΌκΈ°μ μμ‘΄μ±μ κ΄λ¦¬νλλ°, μ΄λ¬ν κ°μ²΄λ₯Ό λΉμ΄λΌκ³ λΆλ₯Έλ€. λΉμ μ€νλ§ IoC 컨ν μ΄λμ μν΄ μμ±λκ³ κ΄λ¦¬λλ©°, μ ν리μΌμ΄μ μ μ¬λ¬ κ³³μμ νμμ λ°λΌ μ£Όμ λλ€.
< IoC Container = DI container, β Bean Container >
IoC 컨ν μ΄λ - DI, Event Listener : μ΄λ€ μ΄λ²€νΈκ° λ²μ΄μ‘μ λ λ°μνλ λ©μλ
β¦κ·Όλ° μ νν 콩?
λΉμ νΉμ§
- μ€νλ§ μ»¨ν μ΄λμ μν΄ κ΄λ¦¬: λΉμ μ€νλ§μ΄ μμ±νκ³ κ΄λ¦¬νλ κ°μ²΄μ. κ°λ°μκ° λΉμ μ§μ μμ±νλ κ²μ΄ μλλΌ, μ€νλ§μ΄ νμν λ λΉμ μλμΌλ‘ μμ±νκ³ , λΉ κ°μ μμ‘΄μ±λ μλμΌλ‘ μ²λ¦¬ν¨
- μ±κΈν€ κΈ°λ³Έ μ€μ½ν: μ€νλ§μμλ κΈ°λ³Έμ μΌλ‘ λΉμ΄ μ±κΈν€μΌλ‘ κ΄λ¦¬λ¨. μ¦, λμΌν λΉμ μ ν리μΌμ΄μ λ΄μμ νλμ μΈμ€ν΄μ€λ§ μ‘΄μ¬ν¨. λ€λ§, νμμ λ°λΌ νλ‘ν νμ μ€μ½νλ₯Ό μ¬μ©νμ¬ λ§€λ² μλ‘μ΄ κ°μ²΄λ₯Ό μμ±ν μ μμ
- μλͺ μ£ΌκΈ°: λΉμ μ€νλ§ μ»¨ν μ΄λκ° μμλ λ μμ±λκ³ , 컨ν μ΄λκ° μ’ λ£λ λ μλ©Έν¨. μ€νλ§μ λΉμ μμ±, μ΄κΈ°ν, μμ‘΄μ± μ£Όμ , μλ©Έ λ± κ°μ²΄μ μ 체 μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬ν¨
λΉ μ μ λ°©λ²
-
XML μ€μ νμΌμμ λΉ μ μ: μ ν΅μ μΈ λ°©μ
-
μλ° μ΄λ Έν μ΄μ μΌλ‘ λΉ μ μ: μ€νλ§μμλ μ΄λ Έν μ΄μ μ μ¬μ©ν΄ λΉμ μ μνλ λ°©μμ΄ λ μΌλ°μ μ΄λ€. μ£Όλ‘ @Component, @Service, @Repository, @Controller μ΄λ Έν μ΄μ μ μ¬μ©ν¨. μ΄ μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€λ μ€νλ§μ΄ μλμΌλ‘ λΉμΌλ‘ λ±λ‘νλ€.
-
@Configurationκ³Ό @Beanμ μ¬μ©ν λΉ μ μ: κ°λ°μκ° νΉμ λ©μλλ₯Ό μ¬μ©ν΄ μ§μ λΉμ μμ±νκ³ μΆμ λ, @Configuration ν΄λμ€ λ΄μμ @Beanμ μ¬μ©νμ¬ λΉμ μ μν μ μμ
λΉμ μ€μ½ν(Bean Scopes)
μ€νλ§μμλ λΉμ΄ μ΄λ€ λ²μ(scope)μμ κ΄λ¦¬λ μ§λ₯Ό μ§μ ν μ μλ€. λνμ μΈ λΉμ μ€μ½νλ λ€μκ³Ό κ°λ€:
- μ±κΈν€ : κΈ°λ³Έ μ€μ½νλ‘, νλμ λΉ μΈμ€ν΄μ€κ° μ ν리μΌμ΄μ μ 체μμ 곡μ λ¨
- νλ‘ν νμ : μμ²μ΄ μμ λλ§λ€ μλ‘μ΄ λΉ μΈμ€ν΄μ€λ₯Ό μμ±ν¨
- Request : μΉ μ΄ν리μΌμ΄μ μμ κ° HTTP μμ²λ§λ€ μλ‘μ΄ λΉμ μμ±ν¨
- Session : κ° HTTP μΈμ λ§λ€ νλμ λΉμ μμ±νκ³ , μΈμ μ΄ μ’ λ£λ λ μλ©Έλ¨
\
λΉ μμ± μ μ± - scope μμ±μ λΉμ μμ± μ μ± μ μ§μ ν μ μλ€.
=> singleton: ν κ°μ κ°μ²΄λ§ μμ±. μ§μ νμ§ μμΌλ©΄ κΈ°λ³Έμ΄ singletonμ΄λ€.
=> prototype: getBean() νΈμΆν λλ§λ€ μμ±
=> request: (μΉ) μμ²μ΄ λ€μ΄μ¬ λλ§λ€ μμ±
=> session: (μΉ) μΈμ μ΄ μμ±λ λλ§λ€ μμ±
=> application: (μΉ) μ ν리μΌμ΄μ μ μμν λ μμ±
=> websocket: (μΉ) μΉμμΌμ΄ μ°κ²°λ λ μμ±*
\
Prototype κ°μ²΄
getBean()μ νΈμΆν λ λ§λ€ μ κ°μ²΄λ₯Ό λ§λ€μ΄ 리ν΄νλ€
νΉλ³ν κ²½μ°κ° μλλ©΄ μ΄ λ°©μμ μ¬μ©νμ§ μλλ€
μ? κ°μ²΄κ° κ³μ μμ±λκΈ° λλ¬Έμ κ°λΉμ§κ° λ§μ΄ λ°μν μ μλ€
=> κ·Έλμ IoC 컨ν μ΄λλ κΈ°λ³ΈμΌλ‘ singleton λ°©μμ μ¬μ©νλ€
λΉ μ¬μ© μμ
μ μμμμ UserServiceμ UserRepositoryλ μ€νλ§ μ»¨ν μ΄λμ μν΄ λΉμΌλ‘ κ΄λ¦¬λκ³ , **μμ‘΄μ± μ£Όμ (DI)**λ₯Ό ν΅ν΄ μλ‘ μ°κ²°λ¨. UserServiceλ UserRepositoryλ₯Ό μμ‘΄μ±μΌλ‘ κ°μ§λ©°, μ€νλ§μ΄ μλμΌλ‘ λΉμ μμ±νκ³ μ£Όμ ν¨~